test_lib_include = [spice_server_include, include_directories('.')]
test_lib_deps = [spice_server_deps, spice_common.get_variable('gio2_deps')]
if host_machine.system() != 'windows'
  test_lib_deps += [dependency('gio-unix-2.0')]
endif

test_lib_sources = [
  'basic-event-loop.c',
  'basic-event-loop.h',
  'test-display-base.cpp',
  'test-display-base.h',
  'test-glib-compat.h',
  'win-alarm.c',
  'win-alarm.h',
  'vmc-emu.cpp',
  'vmc-emu.h',
]

test_libs = []
test_libs += static_library('testlib', test_lib_sources,
                            link_with: spice_server_static_lib,
                            include_directories : test_lib_include,
                            dependencies : test_lib_deps,
                            install : false)

stat_test_libs = {'testlib_stat1' : ['1', '0', '0'],
                  'testlib_stat2' : ['2', '0', '1'],
                  'testlib_stat3' : ['3', '1', '0'],
                  'testlib_stat4' : ['4', '1', '1']}
foreach lib, params : stat_test_libs
  test_libs += static_library(lib, 'stat-test.c',
                              c_args : ['-DTEST_NAME=stat_test@0@'.format(params[0]),
                                        '-DTEST_COMPRESS_STAT=@0@'.format(params[1]),
                                        '-DTEST_RED_WORKER_STAT=@0@'.format(params[2])],
                              include_directories : test_lib_include,
                              dependencies : test_lib_deps,
                              install : false)
endforeach

tests = [
  ['test-codecs-parsing', true],
  ['test-dispatcher', true, 'cpp'],
  ['test-options', true],
  ['test-stat', true],
  ['test-agent-msg-filter', true],
  ['test-loop', true],
  ['test-qxl-parsing', true, 'cpp'],
  ['test-leaks', true],
  ['test-vdagent', true],
  ['test-fail-on-null-core-interface', true],
  ['test-empty-success', true],
  ['test-channel', true, 'cpp'],
  ['test-stream-device', true, 'cpp'],
  ['test-set-ticket', true],
  ['test-listen', true],
  ['test-record', true],
  ['test-display-no-ssl', false],
  ['test-display-streaming', false],
  ['test-playback', false],
  ['test-display-resolution-changes', false],
  ['test-two-servers', false],
  ['test-display-width-stride', false],
]

if spice_server_has_sasl
  tests += [['test-sasl', true]]
endif

if spice_server_has_smartcard == true
  tests += [['test-smartcard', true, 'cpp']]
endif

if host_machine.system() != 'windows'
  tests += [
    ['test-stream', true],
    ['test-stat-file', true],
    ['test-websocket', false],
  ]
endif

if spice_server_has_gstreamer
  tests += [['test-gst', false, 'cpp']]
  if get_option('extra-checks')
    test('test-video-encoders', files('test-video-encoders'))
  endif
endif

foreach t : tests
  test_name = t[0]
  is_test = t[1]
  if t.length() > 2
    language = t[2]
  else
    language = 'c'
  endif
  exe = executable(test_name,
                   sources : '@0@.@1@'.format(test_name, language),
                   link_with : test_libs,
                   include_directories : test_lib_include,
                   c_args : ['-DSPICE_TOP_SRCDIR="@0@"'.format(meson.source_root())],
                   cpp_args : ['-DSPICE_TOP_SRCDIR="@0@"'.format(meson.source_root())],
                   dependencies : test_lib_deps,
                   install : false)

  if is_test
    test(test_name, exe)
  endif
endforeach

executable('spice-server-replay',
           sources : ['replay.c', join_paths('..', 'event-loop.c'), 'basic-event-loop.c', 'basic-event-loop.h'],
           link_with : spice_server_shared_lib,
           include_directories : test_lib_include,
           dependencies : test_lib_deps,
           install : false)
